/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author HNCR
 */
public class Trabajador implements Serializable{
    private String cod_trabajador;
    private String apellidos;
    private String nombres;
    private String dni;
    private String ruc;
    private String sexo;
    private Date fecha_nacimiento;
    private Date fecha_registro;
    private String ciudad;
    private String correo_electronico;
    private String telefono;
    private String experiencia_laboral;
    private TipoTrabajador objTipoTrabajador=new TipoTrabajador();
    private int estado;
    private String est;
    private String salida;
    private String sx;

    public Trabajador() {
    }

    public String getCod_trabajador() {
        return cod_trabajador;
    }

    public void setCod_trabajador(String cod_trabajador) {
        this.cod_trabajador = cod_trabajador;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public String getDni() {
        return dni;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public String getRuc() {
        return ruc;
    }

    public void setRuc(String ruc) {
        this.ruc = ruc;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public Date getFecha_nacimiento() {
        return fecha_nacimiento;
    }

    public void setFecha_nacimiento(Date fecha_nacimiento) {
        this.fecha_nacimiento = fecha_nacimiento;
    }

    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public String getCorreo_electronico() {
        return correo_electronico;
    }

    public void setCorreo_electronico(String correo_electronico) {
        this.correo_electronico = correo_electronico;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getExperiencia_laboral() {
        return experiencia_laboral;
    }

    public void setExperiencia_laboral(String experiencia_laboral) {
        this.experiencia_laboral = experiencia_laboral;
    }

    public TipoTrabajador getObjTipoTrabajador() {
        return objTipoTrabajador;
    }

    public void setObjTipoTrabajador(TipoTrabajador objTipoTrabajador) {
        this.objTipoTrabajador = objTipoTrabajador;
    }

    public Date getFecha_registro() {
        return fecha_registro;
    }

    public void setFecha_registro(Date fecha_registro) {
        this.fecha_registro = fecha_registro;
    }

    public int getEstado() {
        return estado;
    }

    public void setEstado(int estado) {
        this.estado = estado;
    }

    public String getEst() {
        return est;
    }

    public void setEst(String est) {
        this.est = est;
    }

    public String getSalida() {
        return salida;
    }

    public void setSalida(String salida) {
        this.salida = salida;
    }

    public String getSx() {
        return sx;
    }

    public void setSx(String sx) {
        this.sx = sx;
    }
    
    //==========================================================================
    //-------------registro
    public static boolean registrarTrabajador (Trabajador a)
    {
        boolean estado = false ;
        Connection conexion=null;
         try{
             conexion=ControladorBD.darConexionBD();
             CallableStatement st=conexion.prepareCall(" {CALL sp_trabajador_registro "
                     +"(?,?,?,?,?,?,?,?,?,?,?)} ");
             st.setString(1,a.getApellidos());
             st.setString(2, a.getNombres());
             st.setString(3, a.getDni());
             st.setString(4, a.getRuc());
             st.setString(5, a.getSexo());
             st.setDate(6, new java.sql.Date(a.getFecha_nacimiento().getTime()));
             st.setString(7, a.getCiudad());
             st.setString(8, a.getCorreo_electronico());
             st.setString(9, a.getTelefono());
             st.setInt(10, a.getObjTipoTrabajador().getCod_tipo_trabajador());             
             st.registerOutParameter(11,java.sql.Types.VARCHAR);
             st.execute();
             a.setCod_trabajador(st.getString(11));                          
             if(!"EXISTE".equals(a.getCod_trabajador()))
             {
                 estado=true;
             }
        st.close();
        conexion.close();
             
         } catch(Exception error){
             System.out.println("Error en el metodo por: "+ error.getMessage());
                                 error.printStackTrace();
         }
         
        return estado;  
        
    } 
    
    //---------buscar - listar
    public static ArrayList<Trabajador> getBuscarTrabajador(Trabajador trabajador){
     ArrayList<Trabajador> arreglo=null;
     ResultSet rs=null;
        Trabajador obj=null;
        Connection conexion = null;
        String sx="";
        try{
           conexion = ControladorBD.darConexionBD();
           conexion.setAutoCommit(false);
           conexion = ControladorBD.darConexionBD();
            CallableStatement st = conexion.prepareCall( "{CALL sp_trabajador_buscar(?)}");
            st.setString(1, trabajador.getApellidos());
            rs = st.executeQuery();
            if (rs.next()){
               arreglo=new ArrayList<Trabajador>();   
                do{
                        obj =new Trabajador();                        
                        obj.setCod_trabajador(rs.getString("cod_trabajador"));
                        obj.setApellidos(rs.getString("apellidos"));
                        obj.setNombres(rs.getString("nombres"));
                        obj.setDni(rs.getString("dni"));
                        obj.setRuc(rs.getString("ruc"));
                        sx=rs.getString("sexo");
                        if(sx.equals("M")){
                            obj.setSexo("MASCULINO");
                        }else{
                            obj.setSexo("FEMENINO");
                        }                        
                        obj.setFecha_nacimiento(rs.getDate("fecha_nacimiento"));
                        obj.setCorreo_electronico(rs.getString("correo_electronico"));
                        obj.setCiudad(rs.getString("ciudad"));
                        obj.setTelefono(rs.getString("telefono"));
                        obj.setFecha_registro(rs.getDate("fecha_registro"));
                        obj.getObjTipoTrabajador().setDescripcion(rs.getString("descripcion"));                        
                        arreglo.add(obj);
                }while (rs.next());
            }
            st.close();
            conexion.setAutoCommit(true);
            conexion.close();
        }catch(Exception error){
            System.out.println("Error en el metodo por: " + error.getMessage());
            error.printStackTrace();
        }
        return arreglo;

    }
    
    //--------- - listar
    public static ArrayList<Trabajador> getListarTrabajador(){
     ArrayList<Trabajador> arreglo=null;
     ResultSet rs=null;
        Trabajador obj=null;
        Connection conexion = null;
        
        
        try{
           conexion = ControladorBD.darConexionBD();
           conexion.setAutoCommit(false);
           conexion = ControladorBD.darConexionBD();
            CallableStatement st = conexion.prepareCall( "{CALL sp_trabajador_listar()}");
            rs = st.executeQuery();
            if (rs.next()){
               arreglo=new ArrayList<Trabajador>();   
                do{
                        obj =new Trabajador();                        
                        obj.setCod_trabajador(rs.getString("cod_trabajador"));
                        obj.setApellidos(rs.getString("apellidos"));
                        obj.setNombres(rs.getString("nombres"));
                        obj.setDni(rs.getString("dni"));
                        obj.setRuc(rs.getString("ruc"));
                        obj.setSexo(rs.getString("sexo"));
                        if(obj.getSexo().equals("M")){
                            obj.setSx("MASCULINO");
                        }else{
                            obj.setSx("FEMENINO");
                        }                        
                        obj.setFecha_nacimiento(rs.getDate("fecha_nacimiento"));
                        obj.setCorreo_electronico(rs.getString("correo_electronico"));
                        obj.setCiudad(rs.getString("ciudad"));
                        obj.setTelefono(rs.getString("telefono"));
                        obj.setFecha_registro(rs.getDate("fecha_registro"));
                        obj.getObjTipoTrabajador().setCod_tipo_trabajador(rs.getInt("cod_tipo_trabajador"));
                        obj.getObjTipoTrabajador().setDescripcion(rs.getString("descripcion"));              
                        obj.setEstado(rs.getInt("estado"));
                        if(obj.getEstado()==1){
                            obj.setEst("ACTIVO");
                        }else{
                            obj.setEst("INACTIVO");
                        } 
                        arreglo.add(obj);
                }while (rs.next());
            }
            st.close();
            conexion.setAutoCommit(true);
            conexion.close();
        }catch(Exception error){
            System.out.println("Error en el metodo por: " + error.getMessage());
            error.printStackTrace();
        }
        return arreglo;

    }
    
    //-------------modifica
    public static boolean actualizarTrabajador (Trabajador a)
    {
        boolean estado = false ;
        Connection conexion=null;
         try{
             conexion=ControladorBD.darConexionBD();
             CallableStatement st=conexion.prepareCall(" {CALL sp_trabajador_modificar "
                     +"(?,?,?,?,?,?,?,?,?,?,?,?)} ");
             st.setString(1, a.getCod_trabajador());
             st.setString(2,a.getApellidos());
             st.setString(3, a.getNombres());
             st.setString(4, a.getDni());
             st.setString(5, a.getRuc());
             st.setString(6, a.getSexo());
             st.setDate(7, new java.sql.Date(a.getFecha_nacimiento().getTime()));
             st.setString(8, a.getCiudad());
             st.setString(9, a.getCorreo_electronico());
             st.setString(10, a.getTelefono());
             st.setInt(11, a.getObjTipoTrabajador().getCod_tipo_trabajador());                          
             st.registerOutParameter(12,java.sql.Types.VARCHAR);
             st.execute();
             a.setSalida(st.getString(12));                          
             if("ok".equals(a.getSalida()))
             {
                 estado=true;
             }
        st.close();
        conexion.close();
             
         } catch(Exception error){
             System.out.println("Error en el metodo por: "+ error.getMessage());
                                 error.printStackTrace();
         }
         
        return estado;  
        
    } 
    
    //-------------eliminar
    public static boolean eliminarTrabajador (Trabajador a)
    {
        boolean estado = false ;
        Connection conexion=null;
         try{
             conexion=ControladorBD.darConexionBD();
             CallableStatement st=conexion.prepareCall(" {CALL sp_trabajador_eliminar "
                     +"(?,?)} ");
             st.setString(1, a.getCod_trabajador());                         
             st.registerOutParameter(2,java.sql.Types.VARCHAR);
             st.execute();
             a.setSalida(st.getString(2));                          
             if("ok".equals(a.getSalida()))
             {
                 estado=true;
             }
        st.close();
        conexion.close();
             
         } catch(Exception error){
             System.out.println("Error en el metodo por: "+ error.getMessage());
                                 error.printStackTrace();
         }
         
        return estado;  
        
    }
}
